package leetcode;
/*
假设你有一个很长的花坛，一部分地块种植了花，另一部分却没有。可是，花卉不能种植在相邻的地块上，它们会争夺水源，两者都会死去。

给定一个花坛（表示为一个数组包含0和1，其中0表示没种植花，1表示种植了花），和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花？能则返回True，不能则返回False。

示例 1:

输入: flowerbed = [1,0,0,0,1], n = 1
输出: True

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/can-place-flowers
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
思路：
滑动窗口
寻找连续三个0，在中间种一颗树
头部和尾部只需要连续2个0
只有一个0，返回true
 */
public class Test0605 {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        int count=0;
        int treeNums=0;
        if(flowerbed.length==1 && flowerbed[0]==0)
            return true;
        for(int i=0;i<flowerbed.length;i++){
            if(flowerbed[i]==0){
                ++count;
            }
            else {
                count=0;
            }

            if(count==2){
                if(i==1 || i==flowerbed.length-1) {
                    ++treeNums;
                    count=1;
                }
            }
            else if(count==3){
                ++treeNums;
                count=1;
            }
            if(treeNums>=n)
                return true;
        }
        return false;
    }
}
